
"""
作用 ： 主要用于对所有接口的公共功能的集合 ，统一进行管理

功能1：处理url ，返回的是一个完整的URL
功能2：重新封装get方法，post方法 。
功能3：请求头的处理
功能4：登录
"""

from setting import BASE_URL,LOGIN_INFO
import requests
from loguru import logger
from utils.object_utils import cache

class Base(object):

    # 实现url的拼接
    def get_url(self,path,params=None):
        """
        返回的是一个完整的url
        :param path : 接口路径 ，如 ：/admin/admin/update
        :param params : 查询参数 ，如 ：page=1&limit=20&sort=add_time&order=desc
        :return: full_url
        """
        if params:
            full_url = BASE_URL + path + params
            return full_url
        return BASE_URL + path

    # 实现get方法
    def get(self, url):
        """
        返回的JSON格式 ，并且要对错误异常处理
        :return:
        """
        result = None
        response = requests.get(url,headers=self._get_headers())
        try:
            result = response.json()
            logger.success("请求url：{},返回结果:{}".format(url,result))
            return result
        except Exception as e:
            logger.error("请求get方法异常,返回数据为:{}".format(result))

    # 实现post方法
    def post(self,url,data):
        result = None
        response = requests.post(url,json=data ,headers=self._get_headers())
        try:
            result = response.json()
            logger.success("请求url：{},请求体数据:{},返回结果:{}".format(url,data, result))
            return result
        except Exception as e:
            logger.error("请求post方法异常,返回数据为:{}".format(result))

    # 实现请求头的处理
    def _get_headers(self):
        """
        将请求头中的数据以字典的形式返回，包括了：Content-Type,X-Litemall-Admin-Token
        :return:
        """
        headers = {"Content-Type":"application/json"}
        token = cache.get('token')  # 获取缓存中token的值
        if token:
            headers.update({"X-Litemall-Admin-Token":token})
            return headers
        return headers

    # 实现登录
    def login(self):
        """

        :return:
        """
        login_path = '/admin/auth/login'
        login_url = self.get_url(login_path)
        result = self.post(login_url,LOGIN_INFO)
        try:
            if 0 == result.get('errno'):
                logger.success("请求登录接口成功")
                token = result.get('data').get('token')
                cache.set('token',token)
                return result
            else:
                logger.error("登录失败:{}".format(result))
        except Exception as e:
            logger.error("请求登录接口返回异常，异常数据:{}".format(result))
            logger.error("报错信息:{}".format(e))


if __name__ == '__main__':

    base = Base()
    print(base.get_url("/admin/admin/update"))
    search_user_url = base.get_url("/admin/admin/list","?page=1&limit=20&sort=add_time&order=desc")
    print(base.get(search_user_url))
    print(base.login())